#!/usr/bin/python
# --coding:utf-8--

from bs4 import BeautifulSoup

html = """
<html><head><title>这是个测试主题</title></head>
<body>
<div>
    <ul>
         <li class="item-0"><a href="https://www.dushu.com/lianzai/1115_1.html" id="标题1">这是第1个链接</a></li>
         <li class="item-1"><a href="https://www.dushu.com/lianzai/1115_2.html" id="标题2">这是第2个链接</a></li>
         <li class="item-inactive"><a href="https://www.dushu.com/lianzai/1115_3.html" id="标题3">
             <span class="bold">这是第3个链接</span></a>
         </li>
         <li class="item-2"><a href="https://www.dushu.com/lianzai/1115_4.html" id="标题4">这是第4个链接</a></li>
         <li class="item-3"><a href="https://www.dushu.com/lianzai/1115_5.html">
             <span class="link-1">这是第3个链接</span></a>
     </li></ul>
 </div>
<p class="内容">这是文章内容</p>
<p class="标题" name="theme"><b>标题信息</b></p>
<p class="标签">内容标签
"""
soup = BeautifulSoup(html, 'lxml')


# 1. find和find_all方法
"""
搜索文档树，一般用得比较多的就是两个方法，一个是find，一个是find_all。find方法是找到第一个满足条件的标签后就立即返回，只返回一个元素。
find_all方法是把所有满足条件的标签都选到，然后返回回去。使用这两个方法，最常用的用法是出入name以及attr参数找出符合要求的标签。
"""
res = soup.find_all("a", attrs={"href": "https://www.dushu.com/lianzai/1115_2.html"})
print(res)
# 或者是直接传入属性的的名字作为关键字参数
print(soup.find_all("a", href='https://www.dushu.com/lianzai/1115_2.html'))


# 2. select方法
"""
使用以上方法可以方便的找出元素。但有时候使用css选择器的方式可以更加的方便。使用css选择器的语法，应该使用select方法。
以下列出几种常用的css选择器方法
"""
# 1） 通过标签名查找
print("********************************************select方法-通过标签名查找*****=============================================================")
print(soup.select('a'))

# 2）通过类名查找：通过类名，则应该在类的前面加一个.。比如要查找class=”内容“的标签。
print("********************************************select方法-通过类名查找*****============================================================")
print(soup.select('.内容'))

# 3）通过id查找：通过id查找，应该在id的名字前面加一个＃号
print("*********************************************select方法-通过id查找****============================================================")
print(soup.select("#标题3"))

# 4）组合查找：组合查找即和写 class 文件时，标签名与类名、id名进行的组合原理是一样的，例如查找 li 标签中，id 等于 link1的内容，二者需要用空格分开
print("**********************************************select方法-组合查找***============================================================")
print(soup.select("li #标题3"))
# 第二种方法：直接子标签查找，则使用 > 分隔
print(soup.select("head > title"))

# 5) 通过属性查找：查找时还可以加入属性元素，属性需要用中括号括起来，注意属性和标签属于同一节点，所以中间不能加空格，否则会无法匹配到。
print("*********************************************select方法-通过属性查找****============================================================")
print(soup.select('a[href="https://www.dushu.com/lianzai/1115_5.html"]'))

# 6) 获取内容：以上的 select 方法返回的结果都是列表形式，可以遍历形式输出，然后用 get_text() 方法来获取它的内容
print("******************************************select方法-获取内容*******============================================================")
soup = BeautifulSoup(html, 'lxml')
print(type(soup.select('title')))
print(soup.select('title')[0].get_text())

for title in soup.select('title'):
    print(title.get_text())

